// app.js
App({
  onLaunch() {
    // 展示本地存储能力
    const logs = wx.getStorageSync('logs') || []
    logs.unshift(Date.now())
    wx.setStorageSync('logs', logs)

    // 登录
    wx.login({
      success: res => {
        // 发送 res.code 到后台换取 openId, sessionKey, unionId
        console.log('微信登录成功:', res.code)
      }
    })

    // 启动消息轮询
    this.startMessagePolling()
  },
  globalData: {
    userInfo: null,
    token: null,
    baseUrl: 'https://order.023ent.net/api/userex', // 请替换为您的域名
    messagePollingTimer: null,
    lastMessageCheck: 0,
    unreadCount: 0 // 新增：全局未读消息数量
  },

  // 全局请求方法
  request(options) {
    const that = this
    return new Promise((resolve, reject) => {
      const token = wx.getStorageSync('token')
      const fullUrl = that.globalData.baseUrl + options.url
      
      console.log('发送请求:', {
        url: fullUrl,
        method: options.method || 'GET',
        data: options.data || {},
        token: token
      })
      
      wx.request({
        url: fullUrl,
        method: options.method || 'GET',
        data: options.data || {},
        header: {
          'content-type': 'application/json',
          'Authorization': 'Bearer ' + (token || '')
        },
        success: (res) => {
          console.log('请求成功:', res)
          if (res.statusCode === 200) {
            if (res.data.code === 1) {
              resolve(res.data)
            } else {
              console.log('请求失败:', res.data)
              wx.showToast({
                title: res.data.msg || '请求失败',
                icon: 'none'
              })
              reject(res.data)
            }
          } else if (res.statusCode === 401) {
            // token过期，重新登录
            console.log('Token过期，重新登录')
            that.autoLogin()
            reject(res.data)
          } else {
            console.log('HTTP错误:', res.statusCode)
            wx.showToast({
              title: '网络错误',
              icon: 'none'
            })
            reject(res.data)
          }
        },
        fail: (err) => {
          console.log('请求失败:', err)
          wx.showToast({
            title: '网络错误',
            icon: 'none'
          })
          reject(err)
        }
      })
    })
  },

  // 自动登录
  autoLogin() {
    const that = this
    return new Promise((resolve, reject) => {
      wx.login({
        success: (res) => {
          if (res.code) {
            that.request({
              url: '/autoLogin',
              method: 'POST',
              data: {
                code: res.code
              }
            }).then((result) => {
              that.globalData.token = result.data.token
              that.globalData.userInfo = result.data.user
              wx.setStorageSync('token', result.data.token)
              wx.setStorageSync('userInfo', result.data.user)
              resolve(result)
            }).catch((err) => {
              console.error('自动登录失败:', err)
              reject(err)
            })
          } else {
            reject(new Error('微信登录失败'))
          }
        },
        fail: (err) => {
          console.error('微信登录失败:', err)
          reject(err)
        }
      })
    })
  },

  // 启动消息轮询
  startMessagePolling() {
    // 清除之前的定时器
    if (this.globalData.messagePollingTimer) {
      clearInterval(this.globalData.messagePollingTimer)
    }
    
    // 每15秒检查一次新消息（个人小程序更频繁检查）
    this.globalData.messagePollingTimer = setInterval(() => {
      this.checkNewMessages()
    }, 15000)
  },

  // 检查新消息
  checkNewMessages() {
    if (!this.checkLogin()) return
    
    this.request({
      url: '/checkNewMessages',
      method: 'GET',
      data: {
        last_check: this.globalData.lastMessageCheck
      }
    }).then((res) => {
      if (res.data.hasNew) {
        // 有新消息，显示通知
        this.showMessageNotification(res.data.messages)
        this.globalData.lastMessageCheck = Date.now()
        
        // 更新全局未读消息数量
        this.updateGlobalUnreadCount(res.data.unreadCount || 0)
      }
    }).catch((err) => {
      console.error('检查新消息失败:', err)
    })
  },

  // 更新全局未读消息数量
  updateGlobalUnreadCount(count) {
    this.globalData.unreadCount = count
    // 触发自定义事件，通知所有页面更新
    wx.getApp().globalData.unreadCount = count
  },

  // 显示消息通知
  showMessageNotification(messages) {
    messages.forEach(message => {
      if (message.type === 'allocation') {
        // 分工通知 - 使用更醒目的提示
        wx.showModal({
          title: '🎯 新任务分配',
          content: `您有新的任务分配：${message.title}\n\n点击"查看详情"立即处理`,
          confirmText: '查看详情',
          cancelText: '稍后查看',
          confirmColor: '#3cc51f',
          success: (res) => {
            if (res.confirm) {
              // 跳转到任务页面
              wx.switchTab({
                url: '/pages/tasks/tasks'
              })
            }
          }
        })
      } else if (message.type === 'audit') {
        // 审核通知
        wx.showModal({
          title: '📋 报工审核通知',
          content: `您的报工记录已审核：${message.title}`,
          confirmText: '查看详情',
          cancelText: '知道了',
          confirmColor: '#3cc51f',
          success: (res) => {
            if (res.confirm) {
              wx.switchTab({
                url: '/pages/records/records'
              })
            }
          }
        })
      } else {
        // 其他类型消息 - 使用Toast提示
        wx.showToast({
          title: message.title,
          icon: 'none',
          duration: 3000
        })
      }
    })
  },

  // 停止消息轮询
  stopMessagePolling() {
    if (this.globalData.messagePollingTimer) {
      clearInterval(this.globalData.messagePollingTimer)
      this.globalData.messagePollingTimer = null
    }
  },

  // 检查登录状态
  checkLogin() {
    const token = wx.getStorageSync('token')
    if (token) {
      this.globalData.token = token
      this.globalData.userInfo = wx.getStorageSync('userInfo')
      return true
    }
    return false
  }
}) 